<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>

    <style>
        h3{height: 400px;}
    </style>
</head>
<body>
<!-- 节流严格算起来应该属于性能优化的知识，但实际上遇到的频率相当高，处理不当或者放任不管就容易引起浏览器卡死 -->
<!-- 继续思考，使用上面的防抖方案来处理问题的结果是
如果在限定时间段内，不断触发滚动事件（比如某个用户闲着无聊，按住滚动不断的拖来拖去），只要不停止触发，理论上就永远不会输出当前距离顶部的距离

但是如果产品同学的期望处理方案是：即使用户不断拖动滚动条，也能在某个时间间隔之后给出反馈呢？

其实很简单：我们可以设计一种类似控制阀门一样定期开放的函数，也就是让函数执行一次后，在某个时间段内暂时失效，过了这段时间后再重新激活（类似于技能冷却时间）

效果：如果短时间内大量触发同一事件，那么在函数执行一次之后，该函数在指定的时间期那限内不再工作，直
至过了这段时间才重新生效 -->

<h3>hhhh</h3>
<h3>hhhh</h3>
<h3>hhhh</h3>
<h3>hhhh</h3>
<h3>hhhh</h3>

<script>

    function throttle(fn,delay){
        var valid = true;
        return function(){
            if(!true){
                return false;
            }
            valid = false;
            setTimeout(function(){
                fn();
                valid = true;
            },delay)
        }
    }
    window.onscroll = throttle(scrollHandle,2000)

    function scrollHandle(){
        var scrollTop = document.documentElement.scrollTop;
        console.log(scrollTop);
    }


</script>
<!-- 如果一直拖着滚动条进行滚动，那么会以300ms的时间间隔，持续输出当前位置和顶部的距离
讲完了这两个技巧，下面介绍一下平时开发中常遇到的场景：

搜索框input事件，例如要支持输入实时搜索可以使用节流方案（间隔一段时间就必须查询相关内容），
或者实现输入间隔大于某个值（如500ms)，就当做用户输入完成，然后开始搜索，具体使用哪种方案要看业务需求。

页面resize事件，常见于需要做页面适配的时候。需要根据最终呈现的页面情况进行dom渲染
（这种情形一般是使用防抖，因为只需要判断最后一次的变化情况)〉 -->
</body>
</html>